import { useUserStore } from '@/stores/user'

/**
 * 权限控制工具函数
 */

// 角色常量
export const ROLES = {
  ADMIN: 'ADMIN',
  LEADER: 'LEADER', 
  LAB_MANAGER: 'LAB_MANAGER'
}

// 角色描述
export const ROLE_DESCRIPTIONS = {
  [ROLES.ADMIN]: '系统管理员',
  [ROLES.LEADER]: '上级领导',
  [ROLES.LAB_MANAGER]: '实验室管理员'
}

/**
 * 检查用户是否有指定角色
 * @param {string|Array} roles 角色或角色数组
 * @returns {boolean}
 */
export function hasRole(roles) {
  const userStore = useUserStore()
  return userStore.hasAnyRole(Array.isArray(roles) ? roles : [roles])
}

/**
 * 检查用户是否为管理员
 * @returns {boolean}
 */
export function isAdmin() {
  return hasRole(ROLES.ADMIN)
}

/**
 * 检查用户是否为领导
 * @returns {boolean}
 */
export function isLeader() {
  return hasRole(ROLES.LEADER)
}

/**
 * 检查用户是否为实验室管理员
 * @returns {boolean}
 */
export function isLabManager() {
  return hasRole(ROLES.LAB_MANAGER)
}

/**
 * 检查用户是否有管理权限（管理员或领导）
 * @returns {boolean}
 */
export function hasManagePermission() {
  return hasRole([ROLES.ADMIN, ROLES.LEADER])
}

/**
 * 检查用户是否有审批权限
 * @returns {boolean}
 */
export function hasApprovalPermission() {
  return hasRole([ROLES.ADMIN, ROLES.LEADER])
}

/**
 * 检查用户是否有申请权限
 * @returns {boolean}
 */
export function hasApplicationPermission() {
  return hasRole([ROLES.ADMIN, ROLES.LAB_MANAGER])
}

/**
 * 检查用户是否有统计查看权限
 * @returns {boolean}
 */
export function hasStatisticsPermission() {
  return hasRole([ROLES.ADMIN, ROLES.LEADER])
}

/**
 * 检查用户是否有报表查看权限
 * @returns {boolean}
 */
export function hasReportPermission() {
  return hasRole([ROLES.ADMIN, ROLES.LEADER])
}

/**
 * 检查用户是否有用户管理权限
 * @returns {boolean}
 */
export function hasUserManagePermission() {
  return hasRole(ROLES.ADMIN)
}

/**
 * 获取用户角色描述
 * @returns {string}
 */
export function getUserRoleDescription() {
  const userStore = useUserStore()
  return ROLE_DESCRIPTIONS[userStore.userRole] || '未知角色'
}

/**
 * 获取用户可访问的菜单
 * @returns {Array}
 */
export function getAccessibleMenus() {
  const userStore = useUserStore()
  const role = userStore.userRole
  
  const allMenus = [
    { key: 'dashboard', name: '仪表盘', roles: [ROLES.ADMIN, ROLES.LEADER, ROLES.LAB_MANAGER] },
    { key: 'equipment', name: '设备管理', roles: [ROLES.ADMIN, ROLES.LEADER, ROLES.LAB_MANAGER] },
    { key: 'statistics', name: '设备统计', roles: [ROLES.ADMIN, ROLES.LEADER] },
    { key: 'consumable', name: '易耗品管理', roles: [ROLES.ADMIN, ROLES.LEADER, ROLES.LAB_MANAGER] },
    { key: 'report', name: '报表中心', roles: [ROLES.ADMIN, ROLES.LEADER] },
    { key: 'user', name: '用户管理', roles: [ROLES.ADMIN] }
  ]
  
  return allMenus.filter(menu => menu.roles.includes(role))
}
